package com.art8173.advanced.day1.test3;

/**
 * 副卡类 - 继承自BankCard
 * 副卡可以使用主账户余额，并且有额外的透支额度。
 * 关键：balance 是主账户的，副卡操作的是同一个 balance。
 */
public class SubCard extends BankCard {
    // 副卡特有的属性：透支额度
    private double overdraftLimit;

    // 指向主卡的引用，用于获取主账户状态 (可选，但更清晰)
    // private MainCard mainCard; // 如果需要直接访问主卡信息

    public SubCard() {
    }

    // 构造器：副卡的初始余额实际上是主账户的余额
    public SubCard(String cardNumber, String accountHolder, double mainAccountBalance, double overdraftLimit) {
        super(cardNumber, accountHolder, mainAccountBalance); // balance 是主账户余额
        this.overdraftLimit = overdraftLimit;
    }

    // getter 和 setter
    public double getOverdraftLimit() { return overdraftLimit; }
    public void setOverdraftLimit(double overdraftLimit) { this.overdraftLimit = overdraftLimit; }

    // 重写 withdraw 方法 - 副卡的取款逻辑

    public void withdraw(double amount) {
        if (amount <= 0) {
            System.out.println("[" + accountHolder + "] 取款金额必须大于0！");
            return;
        }

        // 计算总可用额度 (主账户余额 + 副卡透支额度)
        double totalAvailable = balance + overdraftLimit;

        if (amount > totalAvailable) {
            // 即使算上透支额度也不够
            System.out.println("[" + accountHolder + "] 取款失败！总可用额度 (" + totalAvailable + "元) 不足，取款金额: " + amount + "元。");
            return;
        }

        // 如果金额 <= 主账户余额，直接扣款 (不透支)
        if (amount <= balance) {
            boolean success = deductBalance(amount);
            if (success) {
                System.out.println("[" + accountHolder + "] 取款成功！取出金额: " + amount + "元。");
            }
        } else {
            // 金额 > 余额，需要部分透支
            double overdraftAmount = amount - balance; // 需要透支的金额
            // 1. 先扣除主账户的所有余额
            balance = 0; // 相当于 deductBalance(balance)，但这里直接设为0
            System.out.println("[" + accountHolder + "] 扣款成功！扣除主账户余额: " + (amount - overdraftAmount) + "元。主账户当前余额: 0.0元。");
            // 2. 剩余部分视为透支
            System.out.println("[" + accountHolder + "] 使用透支额度: " + overdraftAmount + "元。");
            System.out.println("[" + accountHolder + "] 取款成功！本次取款 " + amount + "元。");
            // 注意：透支额度通常有后续还款要求，这里只模拟扣款动作
        }
    }
}